package com.duojuhe.common.utils.page;

import com.duojuhe.common.bean.PageHead;
import com.duojuhe.common.bean.PageReq;
import com.duojuhe.common.constant.SingleStringConstant;
import com.duojuhe.common.exception.base.DuoJuHeException;
import com.duojuhe.common.result.ErrorCodes;
import com.duojuhe.common.result.PageResult;
import com.duojuhe.common.result.ServiceResult;
import com.duojuhe.common.utils.excel.ExcelField;
import com.duojuhe.common.utils.excel.ExportExcelUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class PageHelperUtil {

    /**
     * 启动返回结果处理
     *
     * @param dataList 需要处理的数据集合
     */
    public static <T> ServiceResult returnServiceResult(PageReq pageReq, List<T> dataList) {
        try{
            List<ExcelField> excelFieldList = pageReq.getExcelFieldList();
            if (excelFieldList==null||excelFieldList.size()==0){
                if (dataList==null){
                    dataList = new ArrayList<>();
                    return ServiceResult.ok(new PageResult<>(dataList, 0L));
                }
                // 分页处理
                PageInfo<T> pageInfo = new PageInfo<>(dataList);
                return ServiceResult.ok(new PageResult<>(dataList, pageInfo.getTotal()));
            }else{
                if (dataList==null){
                    dataList = new ArrayList<>();
                }
                ExportExcelUtil.exportExcel(dataList,excelFieldList);
                return null;
            }
        }catch (Exception e){
            throw new DuoJuHeException(ErrorCodes.FAIL);
        }
    }



    /**
     * 启用单排序
     */
    public static void defaultOrderBy(String defaultOrderBy) {
        if (!StringUtils.isEmpty(defaultOrderBy)) {
            PageHelper.orderBy(defaultOrderBy);
        }
    }

    /**
     * 启用单分页
     */
    public static void defaultStartPage(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
    }


    /**
     * 启动排序和分页
     *
     * @param defaultOrderBy 默认无排序字段，设为null或空
     */
    public static void orderByAndStartPage(PageHead pageHead, String defaultOrderBy) {
        // 排序
        orderBy(pageHead, defaultOrderBy);
        // 分页处理
        startPage(pageHead);
    }

    /**
     * 排序
     */
    private static void orderBy(PageHead pageHead, String defaultOrderBy) {
        String orderBy = getOrderBy(pageHead);
        if (StringUtils.isEmpty(orderBy)) {
            orderBy = StringUtils.isEmpty(defaultOrderBy) ? SingleStringConstant.EMPTY : defaultOrderBy;
        }
        if (!StringUtils.isEmpty(orderBy)) {
            PageHelper.orderBy(orderBy);
        }
    }

    /**
     * 获取排序
     * @param pageHead
     * @return
     */
    private static String getOrderBy(PageHead pageHead) {
        if (StringUtils.isNotBlank(pageHead.getOrderBy())) {
            return pageHead.getOrderBy();
        } else {
            return SingleStringConstant.EMPTY;
        }
    }

    /**
     * 分页
     */
    private static void startPage(PageReq pageReq) {
        // 分页处理
        if (pageReq.getRows() > 0) {
            PageHelper.startPage(pageReq.getPage(), pageReq.getRows());
        }
    }

}
